package com.example.commom.redis;

import com.example.commom.config.RedisConfig;
import com.example.commom.global.RedisConstants;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

/**
 *  封装 redis 的操作
 */
@Slf4j
@Component
public class RedisUtils {
    public static void setTokenKeyToRedis(String key, String token) {

        // 创建Redis连接池
        // 从连接池中获取Jedis实例
        try (JedisPool jedisPool = RedisConfig.createJedisPool(); Jedis jedis = jedisPool.getResource()) {
            // 选择存储的数据库
            jedis.select(RedisConstants.REDIS_DATABASE_CODE);

            // 设置token键名和过期时间
            jedis.setex(key, RedisConstants.REDIS_EXPIRED_TIME, token);
            log.info("userId: " + key + ", 的token 已在 redis 存储成功!");
        } catch (Exception exception) {
            log.error(exception.getMessage());
        }
    }

    public static String getJwtTokenFromRedis(String key) {
        // 创建Redis连接池
        try (JedisPool jedisPool = RedisConfig.createJedisPool()) {
            // 从连接池中获取Jedis实例
            Jedis jedis = jedisPool.getResource();

            jedis.select(RedisConstants.REDIS_DATABASE_CODE);
            // 从Redis中获取token
            String token = jedis.get(key);
            // 关闭Redis连接池
            jedisPool.close();

            return token;
        }
    }

    public static void deleteTokenKey(String key) {
        // 创建Redis连接池
        try(JedisPool jedisPool = RedisConfig.createJedisPool()) {
            // 从连接池中获取Jedis实例
            Jedis jedis = jedisPool.getResource();

            // 指定数据库
            jedis.select(RedisConstants.REDIS_DATABASE_CODE);

            // 删除指定的项
            jedis.del(key);

            // 关闭连接
            jedis.close();
        }
    }

    public static String getTokenRedisKey (Integer type, Long id) {
        return type + "-" + id;
    }


}
